#ifndef CLIENTE_H_
#define CLIENTE_H_

#include <string>
#include "red_socket.h"
#include "red_mutex.h"
#include "red_hilodeentrada.h"
#include "Configuraciones.h"

using namespace std;
using namespace red::hilos;
using namespace red::sockets;

class Cliente : public Observable
{
private:
	Socket *m_pSocket;
	red::hilos::thread::Mutex m_Mutex;
	HiloDeEntrada* m_pHiloDeEntrada;
	Configuraciones* configuracionesDelJuego;
	list<Observer*> observadores;
	bool conectado;
	bool bajandoImagen;
	int progresoDescarga;
public:
	Cliente();
	
	void conectar(string host, string puerto);
	bool isConectado();
	bool isBajandoImagen();
	void setBajandoImagen(bool valor);
	void setProgresoDescarga(int valor);
	int getProgresoDescarga();
	void unirseAlJuego();
	void enviarMensaje(string mensaje);
	void escucharMensajes();
	void addObserver();
	void setConfiguracionesDelJuego(Configuraciones* configuraciones);
	Configuraciones* getConfiguracionesDelJuego();
	
	virtual ~Cliente();
};

#endif /*CLIENTE_H_*/
